package com.imooc.service;

import com.imooc.pojo.Items;
import com.imooc.pojo.ItemsImg;
import com.imooc.pojo.ItemsParam;
import com.imooc.pojo.ItemsSpec;
import com.imooc.pojo.VO.ItemCommentVO;
import com.imooc.pojo.VO.ItemsCommentsLevelCountVO;
import com.imooc.pojo.VO.SearchItemVO;
import com.imooc.pojo.VO.ShopcartVO;

import java.util.List;

/**
 * @author lihongyu
 * @CreateTime 2021-10-13 14:02
 * @Description 商品业务逻辑接口
 */
public interface ItemsService {

    /**
     * 根据商品id获取商品对象
     *
     * @param itemId 商品id
     * @return 商品对象信息
     */
    Items getItemsById(String itemId);

    /**
     * 根据商品id获取商品图片列表
     *
     * @param itemId 商品Id
     * @return 商品图片信息列表
     */
    List<ItemsImg> getItemsImgListByItemId(String itemId);

    /**
     * 根据商品id获取商品规格列表
     *
     * @param itemId 商品id
     * @return 商品规格信息列表
     */
    List<ItemsSpec> getItemsSpecListByItemId(String itemId);

    /**
     * 根据商品id获取商品参数信息
     *
     * @param itemId 商品id
     * @return 商品参数信息
     */
    ItemsParam getItemsParamsByItemId(String itemId);

    /**
     * 根据商品id获取商品评价总记录数
     *
     * @param itemId 商品id
     * @return 商品评价总记录数
     */
    ItemsCommentsLevelCountVO getItemsCommentLevelCountByItemId(String itemId);

    /**
     * 根据商品id与评价级别获取评价列表
     *
     * @param itemId 商品id
     * @param commentLevel 评价级别(非必填)
     * @return 商品评价列表信息
     */
    List<ItemCommentVO> getItemsCommentListByItemIdAndCommentLevel(String itemId, Integer commentLevel);

    /**
     * 搜索商品列表
     *
     * @param keywords 关键字
     * @param sort 排序规则
     * @return 商品列表
     */
    List<SearchItemVO> searchItemsList(String keywords, String sort);

    /**
     * 根据分类id搜索商品
     *
     * @param catId 分类id
     * @param sort 排序规则
     * @return 商品列表信息
     */
    List<SearchItemVO> searchItemsListByCatId(String catId, String sort);

    /**
     * 根据商品规格id列表获取最新商品信息
     *
     * @param itemSpecIds 商品规格id列表
     * @return 最新商品信息列表
     */
    List<ShopcartVO> queryItemsBySpecIds(String itemSpecIds);

    /**
     * 根据商品规格id获取商品信息
     *
     * @param specId 商品规格id
     * @return 商品信息
     */
    ItemsSpec queryItemSpecById(String specId);

    /**
     * 根据商品id获取商品主图
     *
     * @param itemId 商品id
     * @return 商品主图路径
     */
    String getItemMainImgById(String itemId);

    /**
     * 扣减商品规格中的库存信息
     *
     * @param itemSpecId 商品规格id
     * @param buyCounts 购买数量
     */
    void decreaseItemSpecStock(String itemSpecId, int buyCounts);
}
